#Bibliotecas
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from bcb import sgsINTRODUÇÃO AO PYTHON - OUTROS TÓPICOS IMPORTANTES
Visualizando dados com o Matplotlib e Seaborn
ipca = sgs.get({'IPCA': 433}, start = "2010-01-01")
desemprego = sgs.get({'desemprego': 24369}) #pnad continua
data = desemprego.merge(ipca, on = 'Date', how = 'left')
data| desemprego | IPCA | |
|---|---|---|
| Date | ||
| 2012-03-01 | 8.0 | 0.21 |
| 2012-04-01 | 7.8 | 0.64 |
| 2012-05-01 | 7.7 | 0.36 |
| 2012-06-01 | 7.6 | 0.08 |
| 2012-07-01 | 7.5 | 0.43 |
| ... | ... | ... |
| 2023-12-01 | 7.4 | 0.56 |
| 2024-01-01 | 7.6 | 0.42 |
| 2024-02-01 | 7.8 | 0.83 |
| 2024-03-01 | 7.9 | 0.16 |
| 2024-04-01 | 7.5 | 0.38 |
146 rows × 2 columns
# Configura o tamanho do gráfico
#plt.figure(figsize = (10,5))
#plt.figure().set_figwidth(15)
#plt.figure().set_figheight(10)
plt.rcParams['figure.figsize'] = [7, 4]
plt.plot(ipca)
plt.style.use('default')# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
plt.plot(desemprego)
plt.style.use('default')# Fazendo um Histograma dos dados
# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
plt.hist(x=ipca['IPCA'],
color = 'darkblue',
bins = 20)
plt.title("valores de jan de 2010 a abril de 2024")
plt.suptitle("Histograma da variação mensal do IPCA")
plt.style.use('ggplot')# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
plt.scatter(x=data['desemprego'], y = data['IPCA'])
plt.title("Relação Desemprego x IPCA")
plt.style.use('classic')# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
sns.set_theme()
sns.lineplot(data=ipca)# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
sns.displot(data = ipca, x= 'IPCA', kde = True)<Figure size 1200x800 with 0 Axes>
# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
sns.regplot(data = data, x = 'desemprego', y = 'IPCA')#Entrada de Dados
mpg_raw = pd.read_excel('dados/mpg.xlsx')
mpg = mpg_raw[['mpg', 'weight', 'horsepower', 'origin', 'cylinders']]
#Estatística Descritiva
mpg.describe()
# Escolhe o tema dos gráficos
sns.set_theme()
# Configura o tamanho do gráfico
plt.figure(figsize = (15,10))
# Gráfico de Histograma
sns.histplot(data = mpg,
x = 'mpg')plt.figure(figsize = (15,10))
# Histograma por grupo
sns.displot(data = mpg,
x = 'mpg',
col = 'origin')<Figure size 1200x800 with 0 Axes>
plt.figure(figsize = (15,10))
# Boxplot por grupo
sns.boxplot(data = mpg,
x = 'origin',
y = 'mpg')plt.figure(figsize = (15,10))
# Correlação e densidade
sns.pairplot(mpg[['mpg', 'weight', 'horsepower','origin']],
hue = 'origin')<Figure size 1200x800 with 0 Axes>
Exemplo Prático usando o Yahoo! Finance
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import seaborn as sns
import yfinance as yf
#Lembrar de pegar o Ticker dentro do Site do Yahoo!Finance
# outra opção: tickers = ['^BVSP', 'BRL=X']
dolar_ibov = yf.download("^BVSP BRL=X",
start = "2023-01-04",
end = "2024-05-01",
auto_adjust=True)['Close']
#Eliminando os NA's
dolar_ibov = dolar_ibov.dropna()
sns.set()
dolar_ibov.plot(subplots = True, figsize = (20, 6))array([<Axes: xlabel='Date'>, <Axes: xlabel='Date'>], dtype=object)
# Gráfico de uma correlação móvel no tempo das duas variáveis
dolar_ibov['BRL=X'].rolling(22).corr(dolar_ibov['^BVSP']).plot(figsize = (20,6))petrobras = yf.download("PETR4.SA")['Close']
#Eliminando os NA's
petrobras = petrobras.dropna()
petrobras.plot(figsize = (22,8))
plt.title('Evolução do preço das ações da Petrobras')Text(0.5, 1.0, 'Evolução do preço das ações da Petrobras')
Gráfico com o Plotnine
Para criar um gráfico com o plotnine a ideia é a mesma do Ggplot2 no R:
Gráficos são representações visuais de dados em formas geométricas (dispersão, linha, coluna, etc.) com definições estéticas (cor, posição, tamanho, etc.).
Gráficos são criados em camadas, combinando elementos visuais independentes.
# Importa os dados do módulo data
# Importar bibliotecas
import pandas as pd
import plotnine as p9 # !pip install plotnine
from plotnine.data import mtcars
# Exibe o dataframe
mtcars.head()| name | mpg | cyl | disp | hp | drat | wt | qsec | vs | am | gear | carb | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Mazda RX4 | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.620 | 16.46 | 0 | 1 | 4 | 4 |
| 1 | Mazda RX4 Wag | 21.0 | 6 | 160.0 | 110 | 3.90 | 2.875 | 17.02 | 0 | 1 | 4 | 4 |
| 2 | Datsun 710 | 22.8 | 4 | 108.0 | 93 | 3.85 | 2.320 | 18.61 | 1 | 1 | 4 | 1 |
| 3 | Hornet 4 Drive | 21.4 | 6 | 258.0 | 110 | 3.08 | 3.215 | 19.44 | 1 | 0 | 3 | 1 |
| 4 | Hornet Sportabout | 18.7 | 8 | 360.0 | 175 | 3.15 | 3.440 | 17.02 | 0 | 0 | 3 | 2 |
(p9.ggplot(mtcars) +
p9.aes(x = "wt", y = "mpg") +
p9.geom_point()
)(p9.ggplot(mtcars) +
p9.aes(x = "wt", y = "mpg", color = "factor(gear)") +
p9.geom_point() +
p9.stat_smooth(method = "lm") +
p9.facet_wrap("gear") +
p9.theme_minimal() +
p9.labs(title = "Gráfico do dataset mtcars",
subtitle = "Criado com o plotnine no Python")
)Para criar um gráfico do plotnine é preciso especificar a camada inicial com a função ggplot(), que recebe como entrada a tabela de dados a serem plotados.
Adicione uma camada de especificação dos eixos X e Y do gráfico com a função aes().
Use sempre o símbolo + para adicionar camadas e coloque a expressão entre parênteses () para escrever em múltiplas linhas.
Para exibir as observações (dados) deve-se escolher uma ou mais geometrias, dentre as várias opções disponíveis (linha, coluna, dispersão, etc.), adicionando uma nova camada com a família de funções geom_*().
Para colorir e diferenciar as observações com base em categorias de uma coluna e inserir uma legenda basta especificar a estética color em aes().
Para alterar as escalas do gráfico (de eixos, de cores, de tamanhos, etc.) existe a família de funções scale_*_*():
Para inserir títulos do gráfico, eixo, legenda, texto de rodapé, etc., adicione camadas de elementos textuais com as funções ggtitle(), ylab(), xlab() e labs().
Para inserir um tema no gráfico existem algumas opções nativas do plotnine, bastando adicionar a camada com a família de funções theme_*().
Para alterar componentes visuais do tema individualmente basta usar a função theme(), que permite definir a estética de todos os componentes existentes no gráfico.
A função é bastante extensa em opções (dezenas de argumentos) e recomenda-se consultar a documentação para detalhes de personalização de cada elemento.
from plotnine.data import meat
meat.head()
meat_long = meat.melt(
id_vars="date",
value_vars=["beef", "veal", "pork", "lamb_and_mutton", "broilers", "turkey"],
var_name="animal",
value_name="weight"
).dropna()
meat_long.head()
meat_long_monthly_agg = meat_long.groupby("date").agg({"weight": "sum"}).reset_index()
meat_long_monthly_agg
(
p9.ggplot(meat_long_monthly_agg, p9.aes(x="date", y="weight"))
+ p9.geom_line()
)Grafico de múltiplas séries
(
p9.ggplot(meat_long, p9.aes(x="date", y="weight", group="animal"))
+ p9.geom_line()
# Styling
+ p9.scale_x_datetime(date_breaks="10 years", date_labels="%Y")
+ p9.theme_538()
)Gráfico com cores diferentes
(
p9.ggplot(meat_long, p9.aes(x="date", y="weight", color="animal"))
+ p9.geom_line()
# Styling
+ p9.scale_x_datetime(date_breaks="10 years", date_labels="%Y")
+ p9.theme_538()
)Gráficos interativos no Python
Os dados abaixo são séries temporais sobre a venda de veículos no Brasil, disponíveis no site do Banco Central.
from bcb import sgs
import plotly.express as px
dados = sgs.get(
codes = {"Autos": 7384, "Leves": 7385, "Caminhões": 7386, "Ônibus": 7387},
start = "2002-01-01"
)
dados.tail()| Autos | Leves | Caminhões | Ônibus | |
|---|---|---|---|---|
| Date | ||||
| 2023-12-01 | 187746 | 48844 | 10068 | 1877 |
| 2024-01-01 | 118503 | 33553 | 7993 | 1546 |
| 2024-02-01 | 120303 | 34967 | 8202 | 1725 |
| 2024-03-01 | 137889 | 38093 | 9654 | 2046 |
| 2024-04-01 | 164365 | 43713 | 10553 | 2182 |
Para criar um gráfico de linha com o Plotly no Python utiliza-se a função line() do módulo express, conforme abaixo:
# Gráfico de linha
fig = px.line(
data_frame = dados,
x = dados.index,
y = dados.columns,
title = "Vendas de Veículos nas Concessionárias do Brasil",
labels = {"value": "Unidades", "Date": "Período", "variable": "Tipo"}
)
fig.show()Ambiente Controlado dentro do Python
O def cria uma função. No exemplo abaixo,
def f(x):
return 10*x + 40
f(2)60
def iguala30(x):
if x > 30:
print("maior")
else:
print("menor")
iguala30(31)maior
iguala30(22)menor
No caso dos loopings, deve-se usar while ou for:
def repetir(n):
i = 5
while(i < n):
print(i)
i = i + 1
else:
print("Fim da Repetição")
repetir(10)5
6
7
8
9
Fim da Repetição
def carac(x):
for a in x:
print(a, len(a))
carac(['comida', 'café', 'chocolate'])comida 6
café 4
chocolate 9